3 ' $linesize: 132 $title: 'RBBS-PC CPC12-5B, Copyright 1985 by D. Thomas Mack'; ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINES 3-121
100 CLEAR:CLS:DEFINT A-Z:DIM LG$(21):LG$(1)="Registration Check Failed":LG$(3)="Locked out attempt":LG$(4)="Password Attempt Failed":P$="Password":VB$="RBBS-PC VERSION ":LG$(5)="Auto Lockout done":LG$(6)="Name in use on another Node! ":LF=-1
102 TT$=". Please tell SYSOP":TU$="^READ^":E1$=" Error in #":F8$="Enter full filename to ":FU$=" type <A)scii, <M>NP, <X>modem, <Q>uit":LG$(0)="More (Y),N,NS,RE":LG$(2)="Sysop name attempted":WIDTH 80:SCREEN 0,0,0:KEY OFF:XA$=CHR$(19):XON$=CHR$(17)
115 CR$=CHR$(13):LF$=CHR$(10):RTN$=CR$+LF$:VA$="CPC12.5B":CA$="RBBS-PC.DEF":DIM SA(7),MD(21),UA(16),FS(10),ME$(6),HE$(9),M(250,2),A$(30),B$(128):IF CE THEN GOSUB 59000 ELSE NC=2:ND$ = "1"
117 OPEN "I",2,CA$:INPUT #2,FA$,PB$,PC$,NA$,NB$,CB,AA,AB,TV!,ME,DF,UB$,XPR,BC,BA,DF,DF,ME$(1),ME$(2),ME$(3),ME$(4),ME$(5),CQ$,DF,OA,SEC,P,LW,WA,DF$:PL=P:INPUT#2,MB$,LG$(11),CF$,CG$,UF1$,WB$,LG$(12),DIR$,CP$,SO,SD$,DF$,DA,QU,PG,QX,RC$,CH$
121 INPUT#2,FS(1),FS(2),FS(3),FS(4),FS(5),FS(6),FS(7),FS(8),FS(9),FS(10),UA(1),UA(2),UA(3),UA(4),UA(5),UA(6),UA(7),UA(8),UA(9),UA(10),UA(11),UA(12),UA(13),UA(14),UA(15),UA(16),UPX!,C,RP,F$,D,MN,PA$,BA$:MES$=MB$:IF CE THEN VA$=VA$ ELSE SB=0
123 UF$=UF1$:IF C<>1 THEN DEF SEG=0:MC=PEEK(&H1FE)+256*PEEK(&H1FF):IF MC>0 THEN DEF SEG=MC:DF=(&H64+PEEK(&H58)+256*PEEK(&H59)+&HC):IF PEEK(DF)=&H1 OR &H2 THEN POKE(DF),&H9
124 UB$=UB$+"."+DIR$:IF MC THEN AX=&HB00:BX=0:GOSUB 60510:AX=&H701:BX=0:GOSUB 60510:BX=-4:AX=&H1:IF CP$="COM2" THEN BX=-3:GOSUB 60510 ELSE GOSUB 60510
125 PRINT VB$;VA$;" Node ";ND$;LF$;"Free memory: ";FRE("A");LF$;LF$;"Press:":FOR I=1 TO 11:INPUT#2,A$:PRINT A$:NEXT:A$="":FOR I=1 TO 10:KEY I,"":NEXT:IF SB=2 THEN CN$=SPACE$(535):CALL INITIO(A)
130 SOH$=CHR$(1):EOT$=CHR$(4):ACK$=CHR$(6):NAK$=CHR$(21):CAN$=CHR$(24):ESC$=CHR$(27):LG$(17)=CHR$(0)+CHR$(112):NE=&H100:IF NOT MN THEN FU$=MID$(FU$,1,14)+MID$(FU$,22)
180 GET 2,CDX:IF LEFT$(CL$,13) = STRING$(13,0) THEN CDX=CDX-1:GOTO 180
187 GOSUB 41500:IF LH THEN LPRINT VB$;VA$;" Node ";ND$;" up at ";TIM$;" on ";DATE$
200 IF INP(MSR)<128 THEN OUT MCR,&H4:GOSUB 50510:OUT MCR,&H0:CLOSE 3
220 OPEN CP$+":"+BA$+",N,8,1,RS,CD,DS" AS #3:BE=-1:IF INP(MSR) > 127 OR WI THEN GOSUB 44000:GOSUB 4910:GOTO 410 ELSE A$="ATZ":GOSUB 52070:GOSUB 50510:A$=SD$:GOSUB 52070
235 PRINT LF$;"READY FOR CALLS AT ";TIM$;" ON ";DATE$;LF$;LF$;"<SCREEN CLEARS TO PREVENT BURN IN>":TCA!=FNTI!:GOSUB 49000:QQ=255:IF VAL(MID$(SD$,24,3))=255 THEN QQ=0:BLK=QQ
239 TR!=0:IF CB>0 THEN TR!=FNTI!:COLOR 7,0,0 ELSE COLOR QU,PG,QX
240 IF SG THEN 253 ELSE X=1:WHILE INP(MSR)<128:X$=INKEY$:FK$=X$:GOSUB 60000
250 IF X$=CHR$(27) THEN 253 ELSE 260
253 TI!=FNTI!:GOSUB 14500:LJ=-1:TY=32400:IF KA$<>"NONE" THEN LOCATE 24,1:INPUT "Enter PASSWORD";Z$:GOSUB 5000:IF Z$ <> KA$ THEN 13549
1425 IF Y$=XA$ THEN WHILE EOF(3):GOSUB 42000:WEND:GOTO 1420
1430 IF Y$=CHR$(11) AND STI THEN 1475
1432 IF Y$=CHR$(24) AND STI THEN 1475
1435 IF PRT THEN LOCATE ,,1:C.R=1:WHILE C.R<=LEN(A$):C.C=C.R+INSTR(MID$(A$,C.R)+CR$,CR$)-2:PRINT MID$(A$,C.R,C.C-C.R+1);MID$(LF$,1,-(C.C<LEN(A$)));:C.R=C.C+LEN(RTN$)+2:WEND
1437 IF LJ THEN 1450
1440 IF UC THEN SWAP A$,Z$:GOSUB 5000:SWAP A$,Z$
1445 PRINT#3,A$;
1450 IF CR<>1 THEN GOSUB 1485 ELSE IF CR>1 THEN GOSUB 1485
1500 GOSUB 42000:TOA!=FRE("A"):TCC!=FNTI!:A=0:B=0:C=0:Q=1:EOL=0:YES=0:B$="":NO=0:A$=A$+"? ":GOSUB 1403:IF LJ THEN LINE INPUT"",B$:GOTO 1575 ELSE IF BA THEN PRINT#3,CHR$(7);
1525 WHILE EOF(3):GOSUB 42000:MMM!=FNTI!-TCC!:IF MMM!>TY THEN 10595
1530 Y$=INKEY$:FK$=Y$:GOSUB 60000:IF Y$<>"" THEN 1545 ELSE WEND:GOSUB 42010
1540 Y$=INPUT$(1,3):IF TOP THEN 1541 ELSE IF Y$=CHR$(127)THEN 1635 ELSE 1545
1541 IF ASC(Y$)=141 THEN OUT LCR,&H1A:BE=0:GR=0:TOP=0
1542 Y$=CHR$(ASC(Y$) AND 127)
1545 IF Y$=CHR$(8) OR Y$=CHR$(7) OR Y$=CHR$(26) OR Y$=CHR$(227) THEN 1635
1550 IF Y$<" " AND Y$<>CR$THEN 1525
1553 IF Y$="^" THEN 1525
1555 IF PRT THEN PRINT Y$;
1557 IF NOT SI THEN PRINT#3,Y$; ELSE PRINT#3,".";
1560 IF Y$=CR$THEN 1570
1563 IF LEN(B$)=>254 THEN A$="Input too long!":GOSUB 1405:GOTO 1500
1565 B$=B$+Y$:GOTO 1525
1570 IF LF THEN PRINT#3,LF$;
1575 A=INSTR(B$,";"):IF A=0 THEN 1620
1580 B$(1)=LEFT$(B$,A-1):A=A+1
1585 B=INSTR(A,B$,";"):C=B-A:IF C<1 THEN EOL=-1:C=128
1595 DF$=MID$(B$,A,C):IF DF$<>"" THEN Q=Q+1:B$(Q)=DF$
1605 IF NOT EOL AND Q<10 THEN A=B+1:GOTO 1585
1610 IF LEN(B$)>64 THEN A$="Try again, "+FE$:GOSUB 1405:GOTO 1500 ELSE 1625
1620 B$(1)=B$:Q=1:IF B$="" THEN Q=0:RETURN
1625 SWAP Z$,B$:GOSUB 5000:SWAP Z$,B$:IF LEFT$(B$,1)="Y" THEN YES=-1 ELSE IF LEFT$(B$,1)="N" THEN NO=-1
1628 IF B$(Q)="NS" OR B$(Q)="ns" THEN NO=0:NH=-1:B$(Q)="":IF Q>1 THEN Q=Q-1
1629 IF B$="RE" AND UG=>MD(4) THEN RE=-1:RETURN ELSE IF B$="K" AND UG=>MD(10) THEN KB=-1:RETURN ELSE RETURN
1635 IF LEN(B$)=0 THEN 1525
1640 B$=LEFT$(B$,LEN(B$)-1):IF PRT THEN PRINT BK1$;
1650 PRINT#3,BK$;:GOTO 1525
1654 R1=INP(LCR):DF=INP(MSB):OUT MSB,0:OUT LCR,R1 OR 128:IF Q=384 THEN OUT LSB,&H80:OUT MSB,&H1:GOTO 1684
1662 IF Q=256 THEN OUT LSB,&H0:OUT MSB,&H1:GOTO 1684
1664 IF Q=96 THEN OUT LSB,&H60:OUT MSB,&H0:GOTO 1684
1666 IF Q=48 THEN OUT LSB,&H30:OUT MSB,&H0
1684 OUT LCR,R1:OUT MSB,DF:RETURN
1700 F$=HE$(2):GOTO 1790
1740 F$=HE$(1):GOTO 1790
1760 F$=WB$:GOTO 1790
1780 F$=HE$(8)
1790 GOSUB 43030:GOSUB 6000:RETURN
1800 A$="Leave private comment for Sysop (Y/N)":GOSUB 1499:MQ=72:IF NOT YES THEN 2210
1840 T$="SYSOP":SUB$="COMMENT":SC=-1:GOTO 2007
1850 CLOSE 2:BX=&H3:EN$=CG$:GOSUB 29000:OPEN "A",2,CG$:A$=FE$+", Thanks for comments!":GOSUB 1399:GOSUB 41510:PRINT#2,NAM$,D$,TIM$:FOR X=1 TO LI:PRINT#2,A$(X):NEXT:PRINT#2,CR$:CLOSE 2:BX=&H3:EN$=CG$:GOTO 29500
1900 GOSUB 4910:A$="Checking messages":GOSUB 1403:GOSUB 30500:T=-1:DQ=0:LC=0:R=FMR:DE!=0:FOR DF=1 TO 250:M(DF,1)=0:M(DF,2)=0:NEXT
1905 GET 1,R:RR=VAL(MID$(R$,118)):IF RR<1 THEN RR=1
1906 IF T AND FNTI!>DE! THEN A$=".":GOSUB 1403:DE!=FNTI!+1
1910 IF R=>NMR THEN FC=M(1,2):GOSUB 21996:GOTO 1950
1915 IF MID$(R$,116,1)=CHR$(226) THEN 1946
1920 IF INSTR(MID$(R$,37,31),NAM$) OR (SH AND INSTR(MID$(R$,37,31),"SYSOP")) OR (SH AND INSTR(MID$(R$,37,31),NA$+" "+NB$)) THEN GOTO 1925 ELSE 1935
1925 IF T THEN A$="Mail may be FOR YOU":GOSUB 1399:T=0
1930 A$=LEFT$(R$,5):GOSUB 1403
1935 IF INSTR(MID$(R$,6,31),NAM$) OR (SH AND INSTR(MID$(R$,6,31),"SYSOP")) OR (SH AND INSTR(MID$(R$,6,31),NA$+" "+NB$)) THEN GOTO 1940 ELSE 1945
1940 IF DQ<128 THEN DQ=DQ+1:B$(DQ)=LEFT$(R$,5)
1945 LC=LC+1:M(LC,1)=R:M(LC,2)=VAL(MID$(R$,2,4))
1946 R=R+RR:GOTO 1905
1950 IF DQ=0 OR NOT RD THEN RETURN ELSE A$="Mail you may have left":GOSUB 1399
1960 FOR I=1 TO DQ:A$=B$(I):GOSUB 1403:NEXT:A$="Please <K>ill unneeded ones":GOSUB 1398:RETURN
2000 IF LC=ME THEN A$="Too many active messages! Try tomorrow":GOSUB 1398:GOTO 3650
2006 PAS$="":SC=0:IF NOT RE THEN T$=""
2007 IF SC THEN Z$=CG$:FT$="comment" ELSE Z$=MES$:FT$="message
2008 IF SC THEN GOSUB 52000:GOTO 2009 ELSE AD$="2000":IF NMR+5=>HMR THEN AD$="1"
2009 IF VAL(AD$)<2000 THEN A$="No room for "+FT$:GOSUB 1405:GOTO 3650
2010 LI=0:L=0:X=0:FOR I=1 TO 30:A$(I)="":NEXT:IF SC THEN 2100
2020 IF RE THEN 2060 ELSE A$="To (C/R for All)":GOSUB 1499:IF LEN(B$(1))>30 THEN A$="30 Char. Max":GOSUB 1405:GOTO 2020
2030 IF Q=0 THEN T$="ALL" ELSE Z$=B$(1):GOSUB 5000:T$=Z$
2035 A$="Subject":GOSUB 1500:IF LEN(B$(1))>25 THEN A$="25 Char. Max":GOSUB 1405:GOTO 2035
2045 IF Q=0 THEN 20095 ELSE Z$=B$(1):GOSUB 5000:SUB$=Z$
2075 IF T$="ALL" THEN A$="Can't Protect Msg to ALL":GOSUB 1405:GOTO 2060
2077 IF INSTR(T$,"SYSOP") OR INSTR(T$,NA$+" "+NB$) THEN 2081
2079 IF NOT RE THEN TEA$=T$:FG=0:SUIX=UIX:GOSUB 12600:UIX=SUIX:GOSUB 21995:IF NOT FG THEN A$=T$+" is not an active user.":GOSUB 1397:GOTO 2020
2081 A$="Sending personal mail to "+T$:GOSUB 1405
2084 PAS$=TU$:GOTO 2100
2085 A$=P$:GOSUB 1500:IF Q=0 THEN 2085 ELSE IF LEN(B$(1))>L THEN A$=STR$(L)+" Chars. max":GOSUB 1405:GOTO 2085 ELSE IF L=15 AND MID$(B$(1),1,1)="!" THEN A$=P$+" can't begin with '!'":GOSUB 1405:GOTO 2085 ELSE RETURN
2088 A$="Must KNOW PASSWORD TO READ msg. Use password":GOSUB 1500: IF NO THEN 2070 ELSE L=14:A1$="!":GOTO 2092
2090 L=15:A1$="
2092 GOSUB 2085:Z$=B$(1):GOSUB 5000:PAS$=A1$+Z$
2100 A$="Type "+FT$+" (C/R to end,"+STR$(LW)+" lines max)":GOSUB 1398:GOSUB 3200
2125 LI=LI+1:A$=RIGHT$(STR$(LI),2)+": "+A$(LI):GOSUB 1403:GOSUB 3700:IF A$(LI)="" THEN LI=LI-1:GOTO 2300
2140 J=LI:GOSUB 2200:IF X THEN 2300 ELSE 2125
2200 X=0:IF J<(LW-2) THEN RETURN ELSE A$=MID$("2 lines leftLast line Full",12*(J-(LW-2))+1,12):X=(J>(LW-1))
2210 GOSUB 1405:RETURN
2300 GOSUB 1405:IF NOT XPR THEN GOSUB 50400
2315 A$="Subfunc <A,C,D,E,I,L,M,S,?>":GOSUB 1499:IF Q=0 THEN 2315 ELSE Z$=B$(1):GOSUB 5000
2325 IF Q>1 AND Z$<>"M"THEN L=VAL(B$(Q)):GOSUB 3320
2330 ON INSTR("ACDEILMS?",Z$) GOTO 2400,2340,2500,2600,2800,3000,3100,3400,2345:GOTO 2300
2340 GOSUB 3200:GOTO 2140
2345 F$=HE$(4):GOSUB 1790:GOTO 2315
2400 A$="Abort "+FT$:GOSUB 1499:IF NOT YES THEN 2300
2430 A$="Aborted":GOSUB 1398:GOTO 3650
2500 GOSUB 1405:IF Q=1 THEN A$="Delete ":GOSUB 1403:GOSUB 3300
2520 A$="Line #"+STR$(L):GOSUB 1405:A$=A$(L):GOSUB 1400:A$="Delete this line":GOSUB 1500:IF NOT YES THEN A$="NOT Deleted":GOSUB 1405:GOTO 2300
2550 LI=LI-1:FOR X=L TO LI:A$(X)=A$(X+1):NEXT:A$(LI+1)="":A$="Deleted Line #"+STR$(L):GOSUB 1405:GOTO 2300
2600 GOSUB 1405:IF Q=1 THEN GOSUB 3300
2620 A$="Line #"+STR$(L)+" is:"+RTN$+A$(L):GOSUB 1400:A$="Enter <Oldstring;New> or C/R":GOSUB 1405:B$(2)="":GOSUB 1500:IF Q=0 THEN 2300
2660 X=INSTR(1,A$(L),B$(1)):IF X=0 THEN 2710
2670 FF=LEN(B$(1)):JJ=LEN(B$(2)):IF FF=JJ THEN MID$(A$(L),X)=B$(2):GOTO 2620
3020 FOR X=L TO LI:IF RET THEN 2300 ELSE A$=RIGHT$(STR$(X),2)+": "+A$(X)
3030 GOSUB 1405:NEXT:GOTO 2300
3100 GOSUB 1405:IF Q<>1 THEN B$(1)=B$(Q):GOTO 3130
3115 A$="SET Right-Margin from"+STR$(MQ)+" TO (8...72)":GOSUB 1500:IF LEN(B$(1))>2 THEN 3140
3130 X=VAL(B$(1)):IF X>7 AND X<81 THEN MQ=X:A$="Margin now"+STR$(MQ):GOTO 3150
3140 A$="Invalid - Margin UNCHANGED"
3150 GOSUB 1405:IF MS THEN RETURN ELSE 2300
3200 A$=" ["+STRING$(MQ-2,45)+"]":GOTO 1398
3300 A$="Line #":GOSUB 1500:L=VAL(B$(1))
3320 IF L=>1 AND L=<LI THEN RETURN
3330 IF Q=0 THEN RETURN 2300
3340 A$="No such line":GOSUB 1405:RETURN 2300
3400 IF SC THEN 1850
3405 GOSUB 4910:DF$=R$:A$="Adding new msg #"+STR$(LE+1):GOSUB 1403:REC=0:N$="":LE=LE+1:LC=LC+1:MT$=STR$(LE)+SPACE$(5-LEN(STR$(LE))):IF PAS$=TU$ THEN MID$(MT$,1,1)="*
3460 FI$=FNS$(NAM$,31):T$=FNS$(T$,31):MID$(T$,23,8)=TIME$:SUB$=FNS$(SUB$,25):PAS$=FNS$(PAS$,15):FOR J=1 TO LI:A$(J)=A$(J)+CHR$(227):REC=REC+LEN(A$(J)):NEXT:IF REC MOD 128=0 THEN N$=STR$(REC\128+1) ELSE N$=STR$(REC\128+2)
3530 GET 1,NMR:M(LC,1)=NMR:M(LC,2)=LE:LSET R$=MT$+FI$+T$+D$+SUB$+PAS$+CHR$(225)+N$:PUT 1,NMR:NMR=NMR+VAL(N$):N$="":FOR J=1 TO LI:A$=".":GOSUB 1403:N$=N$+A$(J):IF LEN(N$)>127 THEN LSET R$=N$:PUT 1:N$=MID$(N$,129)
4416 IF INSTR("Mm",B$(LL)) THEN MU=-1:GOTO 4370 ELSE IF MM=0 THEN 20095 ELSE GOSUB 1405
4430 IF RIGHT$(B$(LL),1)="+"THEN FOW=-1 ELSE IF RIGHT$(B$(LL),1)="-"THEN REV=-1:GOTO 4490
4450 FOR R=1 TO LC:IF RT AND M(R,2)=MM THEN 4520
4470 IF((RT AND FOW)OR QU OR SU)AND M(R,2)=>MM THEN 4520
4480 NEXT:GOTO 4515
4490 FOR R=LC TO 1 STEP-1:IF M(R,2)<=MM THEN 4540
4510 NEXT
4515 GOSUB 3965:GOTO 4370
4520 CK=R:IF RT AND NOT FOW THEN 4560
4530 QQ=R:CK=LC:SO=1:GOTO 4550
4540 QQ=R:CK=1:SO=-1
4550 FOR R=QQ TO CK STEP SO
4560 GET 1,M(R,1):PF=0:UH=0:Z$=MID$(R$,101,15):X=1
4561 FF=INSTR(MID$(R$,X),NAM$):IF FF THEN X=LEN(NAM$)+FF:IF (FF<7 OR MID$(R$,FF-1,1)=" ") AND (X>66 OR MID$(R$,X,1)=" ") THEN UH=-1 ELSE IF FF<37 THEN X=37:GOTO 4561
4562 IF NOT SH THEN IF INSTR(R$,TU$)>0 AND NOT UH THEN PF=-1:IF FOW OR REV THEN 4635
4563 MM=VAL(MID$(R$,2,4)):IF MU AND NOT UH THEN 4625
4580 IF INSTR(R$,LG$(15))=0 THEN 4635
4581 IF MID$(R$,116,1)=CHR$(226) THEN 4630
4582 PG=0:IF MID$(Z$,1,1)="!" THEN IF NOT SH THEN PG=-1:KEE$=MID$(Z$,2)+" ":MR=0:GOSUB 665
4584 IF PF AND (QU OR (SU AND NOT PG)) THEN 4635
4585 IF PF THEN IF PG THEN SJ$="<PASSWORD>" ELSE SJ$="<PROTECTED>" ELSE SJ$=MID$(R$,76,25)
4590 IF QU THEN Z$=LEFT$(R$,5)+" "+SJ$:Z=31:GOSUB 8100:A$=Z$:GOSUB 1405:GOTO 4630
4600 GOSUB 8000:IF SU OR RET THEN 4630 ELSE IF M(R,2)>LO THEN LO=M(R,2)
4610 IF NOT PF THEN 4613 ELSE IF PG THEN MR=2:GOSUB 667
4611 IF PF THEN 4625
4613 GOSUB 9000:GOSUB 1405:IF Q=0 OR PL=0 THEN 4625
4614 GOSUB 41000:KB=0:RE=0:IF NH THEN 4625
4616 A$=LG$(0)+MID$(",K",1,-UH*2):GOSUB 1500:IF NO THEN 4650
4618 IF KB AND (UH OR SH) THEN IF UG>=MD(10) THEN GOSUB 62520:GOSUB 3950:GOSUB 62530:GOTO 4625 ELSE RS$="MMenu R) Func 10":GOSUB 1380:GOTO 4625
4620 IF NOT RE THEN 4625
4621 IF UG<MD(4) THEN RS$="MMenu R) Func 4":GOSUB 1380:RE=0:GOTO 4625 ELSE IF LEFT$(SUB$,3)<>"(R)" THEN SUB$="(R)"+LEFT$(SUB$,22)
4750 A$="SYSOP in from"+STR$(AA)+" to"+STR$(AB)+", but not now":GOSUB 1397
4755 A$="Please leave msg/comment":Z$="Paged at "+LEFT$(TIME$,5):GOSUB 13670:GOTO 2210
4765 A$="SYSOP here! Go ahead":GOSUB 1399
4770 CM=-1:CHT!=FNTI!:GOSUB 49000
4775 WHILE EOF(3):A$=INKEY$:FK$=A$:GOSUB 60000:IF A$=CHR$(8) OR A$=CHR$(7) OR A$=CHR$(26) OR A$=CHR$(227) OR A$=CHR$(127)THEN 4805 ELSE IF A$=ESC$THEN CM=0:CLS:CH!=FIX(FNTI!-CHT!)+CH!:GOTO 4820
4785 IF A$=CR$AND LF THEN PRINT#3,LF$;
4790 IF A$<>"" THEN 4800
4795 WEND
4797 A$=INPUT$(1,3):IF A$=CHR$(8) OR A$=CHR$(7) OR A$=CHR$(26) OR A$=CHR$(227) THEN 4805 ELSE IF A$=CR$AND LF THEN PRINT#3,LF$;
4800 GOSUB 1403:GOTO 4775
4805 IF POS(0)>1 THEN PRINT BK1$;:PRINT#3,BK$;
4810 GOTO 4775
4820 IF AM$="U" THEN RETURN 1330 ELSE IF AM$="F" THEN RETURN 20015 ELSE 20095
4850 A$="RBBS-PC Ver "+VA$+" Node "+ND$:GOSUB 1398:IF NOT GRF THEN A$="Caller # "+STR$(CJ#)+" "
4855 A$=A$+"# active msgs:"+STR$(LC)+" Next msg #"+STR$(LE+1):LO=-LO*(LO<=LE):IF LO>0 THEN A$=A$+" Last msg read:"+STR$(LO)
4857 GOSUB 1399:IF SH THEN A$="USERS: used"+STR$(NUR-1)+" room for"+STR$(HUR+1-NUR)+" MESSAGES: used"+STR$(LC)+" room for"+STR$(ME-LC):GOSUB 1399
5000 FOR Z=1 TO LEN(Z$):MID$(Z$,Z,1)=CHR$(ASC(MID$(Z$,Z,1))+32*(ASC(MID$(Z$,Z,1))>96)):NEXT:RETURN
5100 X$="":FOR Z=1 TO LEN(Z$):IF ASC(MID$(Z$,Z,1))<65 OR ASC(MID$(Z$,Z,1))>90 THEN 5105 ELSE X$=X$+MID$(Z$,Z,1)
5105 NEXT:Z$=X$:RETURN
5110 A$="Enter new password":GOSUB 45010:IF Q=0 THEN RETURN ELSE IF LEN(B$(1))>15 OR B$(1)=SPACE$(LEN(B$(1))) THEN 5110 ELSE Z$=B$(1):GOSUB 5000
5120 A$="Reenter new password":GOSUB 45010:IF Q=0 THEN RETURN ELSE SWAP Z$,B$(1):GOSUB 5000:IF Z$<>B$(1)THEN A$="Don't match!":GOTO 2210
5125 IF MP AND NCH>MP AND NOT SH THEN A$="No changes permitted" ELSE Z=1:GOSUB 5140:IF NOT FG THEN 5130 ELSE A$="Temporary change":PW$=X$:TV!=TJA*60:UG=TFA:GOSUB 41070:SH=(UG>=SE)
5140 FG=0:CLOSE 2:OPEN PD$ FOR INPUT AS 2:Z$=FNS$(Z$,15)
5150 IF EOF(2) THEN 5160 ELSE INPUT #2,X$,TFA,TJA:IF LEN(X$)>15 THEN 5150 ELSE X$=FNS$(X$,15):IF Z$<>X$ THEN 5150 ELSE IF Z THEN FG=-1 ELSE IF UG=TFA THEN FG=-1 ELSE 5150
5160 RETURN
5200 IF Q>1 THEN 5230
5220 A$="CHANGE page length from"+STR$(PL)+" TO (0=continuous)":GOSUB 1500:IF Q=0 THEN 1200
5230 A=VAL(B$(Q)):IF A<0 OR A>255 THEN 5220 ELSE PL=A:GOTO 1200
5300 NAME CQ$ AS CQ$
5310 IF NOT XPR THEN F$=CQ$:GOSUB 43025
5315 A$="Conference Func <J,M,Q,X>":GOSUB 1500:IF Q=0 THEN 2210 ELSE Z$=B$(1):GOSUB 5000:IF Z$="X" THEN GOSUB 4240:GOTO 5310 ELSE FF=INSTR("JMQ",Z$):IF FF=0 THEN 5310 ELSE ON FF GOTO 5320,5350,2210
5320 A$="Enter conference name":GOSUB 1500:IF Q=0 THEN 5310
5323 GRN$=B$(1):MES$=MID$(MB$,1,2)+GRN$+"M.DEF":NAME MES$ AS MES$
5325 IF NAM$<>"SYSOP" THEN IF NOT (GRF AND (UF$=UF1$)) THEN GOSUB 26000:GOSUB 9400:GET 2,UIX:GOSUB 9600:PUT 2,UIX:GOSUB 27000
5327 UF$=MID$(UF$,1,2)+GRN$+"U.DEF":NAME UF$ AS UF$
5330 IF NAM$="SYSOP" THEN 5345 ELSE TEA$=NAM$:GOSUB 12600:GOSUB 21995
5340 IF FG THEN UIX=LOC(2):TIX=UIX:GOSUB 9500:GOTO 5345 ELSE A$="conference unavailable to you":GOSUB 1397:GRN$="":UIX=MUIX:UF$=UF1$:MES$=MB$:GOSUB 30500:GOSUB 23000:GRF=0:GOTO 2210
5500 IF BPS<>-1 THEN A$="only 300 baud can change speed":GOTO 1397
5507 A$="Change to 450 baud":GOSUB 1500:IF NOT YES THEN RETURN
5510 A$="Change. Then press <C/R> until I respond":GOSUB 1405:FOR I=1 TO 3:GOSUB 50510:NEXT:C=0:SWAP Q,NE:GOSUB 1654:SWAP Q,NE
5530 C=C+1:GOSUB 42000:IF C=20 THEN 10595 ELSE GOSUB 50500
5535 IF NOT EOF(3)THEN IF ASC(INPUT$(1,3))=13 THEN 5540
5537 GOTO 5530
5540 Z$="Changed to 450 baud":GOSUB 13670:A$=Z$:GOSUB 1405:BPS=-2:RETURN
5600 GOSUB 41000:IF NH THEN RETURN ELSE A$=LEFT$(LG$(0),13):GOSUB 1500:RETURN
6000 IF STI THEN A$="* <Ctrl K> or <Ctrl X> aborts <Ctrl S> suspends *":GOSUB 1399
6020 CK=0:GOTO 7100
6030 Q=-1:CK=0:GOTO 7110
6080 A$="Missing file "+F$+TT$:GOTO 2210
7000 A$="Scanning "+MID$(F$,3,INSTR(F$,".")-3)+" for "+A1$:GOSUB 1405:PG=-1
7100 CLOSE 2:OPEN "I",2,F$:Q=0:FF=PL-1
7110 IF EOF(2)OR(INP(MSR)<128 AND NOT LJ)THEN 7260
7120 IF PL AND Q>=0 THEN IF Q>=FF THEN GOSUB 5600:IF NO THEN 7260 ELSE Q=0
7130 LINE INPUT #2,A$:IF CK=0 THEN 7250
7157 IF CK>1 THEN Z$=A$:GOSUB 5000:XXX=(INSTR(Z$,RS$)=0):GOTO 7190
7160 A=INSTR(9,MID$(A$,1,32),"/"):IF A=0 THEN A=INSTR(9,MID$(A$,1,32),"-")
7162 IF A<3 THEN 7110 ELSE IF INSTR("0123456789",MID$(A$,A-1,1))=0 THEN 7110 ELSE A=A-2:KEE$=FNDC$(MID$(A$,A,8)):IF MID$(KEE$,3,1)=" " THEN MID$(KEE$,3,1)="0
7185 IF MID$(KEE$,5,1)=" " THEN MID$(KEE$,5,1)="0
7189 XXX=(KEE$<RS$)
7190 IF XXX THEN 7110 ELSE IF PG THEN PG=0:CLOSE 2:OPEN "I",2,F$:Q=0:GOTO 7110
7200 IF PG THEN 7110
7250 GOSUB 1405:Q=Q-(Q>=0):IF NOT RET THEN 7110
7260 A$="":Q=0:CLOSE 2:GOSUB 42000:RETURN
8000 GOSUB 1405:IF RET THEN RETURN
8020 IF MID$(R$,37,5)="ALL " THEN T$="ALL":GOTO 8040
8030 Z=22:Z$=MID$(R$,37,Z):GOSUB 8100:T$=Z$
8040 Z=25:Z$=MID$(R$,76,Z):GOSUB 8100:SUB$=Z$:IF PF THEN SUB$=SJ$
8050 Z=31:Z$=MID$(R$,6,Z):GOSUB 8100:FI$=Z$:A$="Msg # "+LEFT$(R$,5)+" Dated "+MID$(R$,68,8)+" "+MID$(R$,59,8):IF NOT RET THEN A$=A$+RTN$+" From: "+FI$+RTN$+" To: "+T$+RTN$+" Re: "+SUB$
8080 GOTO 2210
8100 Z=LEN(Z$):FOR I=1 TO LEN(Z$):IF MID$(Z$,Z,1)<>" " THEN 8110
8105 Z=Z-1:NEXT
8110 Z$=MID$(Z$,1,Z):RETURN
9000 GOSUB 1405:Q=4:FOR X=2 TO VAL(MID$(R$,118)):GOSUB 1403:EOL=0:J=1:GET 1
9050 B=INSTR(J,R$,CHR$(227)):IF RET THEN RETURN
9060 C=B-J:IF C<0 THEN C=128:EOL=-1
9070 A$=MID$(R$,J,C):IF EOL THEN 9090
9085 J=B+1:GOSUB 57100:GOTO 9050
9090 NEXT:A$="":RETURN
9100 GOSUB 1405:GOSUB 9140:GOSUB 41510:A$="Now "+TIM$+" Time on: ":IF HHH>0 THEN A$=A$+STR$(HHH)+" Hrs"
9110 A$=A$+STR$(MMM)+" Min &"+STR$(SSS)+" Sec":GOTO 1405
9140 H=FNV(TI$,1):M=FNV(TI$,4):S=FNV(TI$,7):HH=FNV(TIME$,1):MM=FNV(TIME$,4):JJ=FNV(TIME$,7):IF S=<JJ THEN SSS=JJ-S ELSE SSS=60-(S-JJ):M=M+1
9150 IF M=<MM THEN MMM=MM-M ELSE MMM=60-(M-MM):H=H+1
9160 IF H=<HH THEN HHH=HH-H:RETURN ELSE HHH=24-(H-HH):RETURN
9400 CLOSE 2:OPEN "R",2,UF$,128:FIELD 2,31 AS NM$,15 AS PW$,2 AS SL$,14 AS OP$,24 AS CS$,19 AS MA$,14 AS TD$,3 AS LND$,2 AS UDL$,2 AS UUL$,2 AS ET$:FIELD #2,128 AS HU$:RETURN
9800 IF GRF THEN A$="Nodes won't display within a conference!":GOTO 1400 ELSE GOSUB 1405:GOSUB 30500:FOR X=2 TO MG+1:GET 1,X:A$=MID$(R$,1,31)+"Node"+STR$(X-1)+LEFT$(" in",1-2*(MID$(R$,57,1)<>"A"))+"active":GOSUB 1405:NEXT:RETURN
10096 GOSUB 12700:GOSUB 9400:STI=-1:Q=0:FOR I=1 TO HUR-1:GET 2,I:IF ASC(NM$)=0 OR LEFT$(NM$,3)=" " THEN 10099 ELSE A$=LEFT$(NM$,20)+CS$+MA$+TD$:GOSUB 1405:IF RET THEN RETURN ELSE GOSUB 57110
10099 NEXT:STI=0:RETURN
10100 F$=CF$:GOTO 57000
10390 A$="Recover Msg #":GOSUB 1500:MM=VAL(B$(1)):IF MM<1 THEN 1450
10410 R=FMR:GOSUB 1405:GOSUB 30500
10420 GET 1,R:RR=VAL(MID$(R$,118)):IF R=>NMR THEN A$="No Msg #"+STR$(MM):GOTO 2210
10440 IF VAL(MID$(R$,2,4))<>MM THEN R=R+RR:GOTO 10420
10450 IF INSTR(R$,CHR$(226))<>0 THEN GOSUB 22000:LSET R$=LEFT$(R$,115)+CHR$(225)+MID$(R$,117):PUT 1,LOC(1):GOSUB 25000:A$="Restored Msg #"+STR$(MM):GOSUB 1405:GOTO 10490
10620 Z$=LG$(I):GOSUB 13670:Z$=NAM$+" on at "+D$+", "+TIM$+"** LOGON DENIED **, "+PE$:NG$=FNS$(Z$,128):GOSUB 13674
10698 A$="Access denied!":GOSUB 1399:GOTO 13540
10720 CLS:FILES B$(J):X=CSRLIN:LL=18+5*CE:FF=2+CE:LOCATE FF,1,1:LG$(21)=FNS$(DIR$,8):FOR I=FF TO X:FOR B=1 TO 66 STEP LL:G=G+1:B$(G)="":FOR QQ=0 TO 7:H=SCREEN(I,(B+QQ)):B$(G)=B$(G)+CHR$(H):NEXT
10733 IF LN THEN IF (LG$(13)="YES" AND B$(G) = LG$(21)) OR (LG$(14)="YES" AND B$(G)=UB$) THEN G=G-1:GOTO 10840
10740 IF LEFT$(B$(G),1)=" " THEN G=G-1:RETURN
10840 NEXT:NEXT:RETURN
10925 MS=-1:GOSUB 3100:MS=0:RETURN
10930 IF DA<2 THEN A$="Requires DOS 2.0 up":GOTO 1200
10932 IF LJ THEN A$="Only for remote SYSOP's":GOTO 1200
10934 CLOSE 2:OPEN "O",2,CH$:PRINT#2,"ECHO OFF":PRINT#2,"CTTY ";CP$:PRINT#2,"ECHO RBBS-PC ";VA$:PRINT#2,"ECHO SYSOP in Remote Console Mode at ";TIME$;" on ";DATE$:PRINT#2,"COMMAND ":PRINT#2,"CTTY CON":PRINT#2,RC$:GOSUB 56000
10950 GOSUB 41500:Z$="Exited to DOS at "+TIM$:GOSUB 13670:GOTO 10992
10970 IF NOT WA THEN A$="All doors closed":GOSUB 1405:GOTO 20095
10973 F$=ME$(5):GOSUB 43025:IF UG<UDR THEN A$="You may not open a door":GOTO 1405
10974 A$="Open which door (C/R to end)":GOSUB 1500:Z$=B$(1):GOSUB 5000:IF B$(1)=""THEN RETURN
10976 CLOSE 2:OPEN "I",2,F$
10978 IF EOF(2)THEN A$="No such door "+Z$:GOSUB 1405:GOTO 1200 ELSE GOSUB 42010
10982 LINE INPUT#2,A$:IF LEN(A$)<LEN(Z$)GOTO 10978 ELSE IF INSTR(A$,Z$)=0 THEN 10978 ELSE Z$=Z$+".BAT
10986 NAME Z$ AS Z$
10987 CLOSE 2:OPEN "O",2,CH$:PRINT#2,Z$:PRINT#2,RC$:CLOSE 2:A$=Z$+" door opened at "+TIME$+" on "+DATE$:GOSUB 1405:WI=-1:GOSUB 56000:Z$=LEFT$(Z$,LEN(Z$)-4)+" door opened!":GOSUB 13670
10992 CLOSE 3:OUT MCR,INP(MCR)OR 1:IF WI THEN IF MC THEN DEF SEG=MC:GOSUB 60500:POKE(&H64+PEEK(&H58)+256*PEEK(&H59)+&HC),ASC(RIGHT$(CP$,1))-48:AX=&H700+MF:GOSUB 60510:AX=&HB01:BX=0:GOSUB 60510
11003 IF Q=0 THEN 20093 ELSE QQ=0:Z$=LEFT$(B$(1),1):GOSUB 5000:IF Z$="A"THEN 12300 ELSE IF Z$="M"THEN STI=0 ELSE IF Z$="P"THEN QQ=-1 ELSE IF Z$="S"THEN JJ=-1:STI=0 ELSE IF Z$<>"L" THEN 11000
11005 GOSUB 9400:Z=1:IF JJ THEN A$="Scan for N)ame, P)wd, C)ity/St, S)ystem or L)evel":GOSUB 1500:Z$=LEFT$(B$(1),1):GOSUB 5000:LG$(1)=Z$:CR=0:GOSUB 1405:GOSUB 12966:GOTO 12962
11010 FOR J=Z TO HUR-1:GET 2,J
11015 IF ASC(NM$)=0 OR LEFT$(NM$,3)=" " THEN 11300 ELSE OF=CVI(SL$):A$=STR$(LOC(2))+":"+NM$+" SECURITY "+STR$(OF)+" ":IF OF=<MO THEN A$=A$+" <Locked out>":GOTO 11100
11020 A$=A$+"Pw="+PW$+" Times on="+STR$(CVI(MID$(OP$,1,2)))
11025 IF QQ THEN LPRINT A$
11027 GOSUB 1405:RH=RET:IF OF>=SE THEN A$=" (SYSOP) " ELSE A$=SPACE$(12)
11030 A$=A$+TD$+" "+CS$+MA$
11100 IF QQ THEN LPRINT A$
11101 GOSUB 1405:RH=RET:A$=" DOWNLOADS="+STR$(CVI(UDL$)):A$=FNS$(A$,30)+"UPLOADS="+STR$(CVI(UUL$)):A$=FNS$(A$,60)+"TIME USED="+STR$(CVI(ET$))+" Min":IF QQ THEN LPRINT A$
11105 GOSUB 1405:IF STI THEN 11300
11110 A$="D)elete, F)ind, M)enu, N)ew pwd, P)rint, Q)uit, S)ecurity, #)user":GOSUB 1500:IF NOT JJ AND Q=0 THEN 11310
11115 Z$=LEFT$(B$(1),1):GOSUB 5000:X=INSTR("DNPQFSM",Z$):IF Z$=""AND JJ THEN 12965 ELSE ON X GOTO 11130,11160,11220,11320,11340,11390,11330
11125 Z=VAL(B$):IF Z<1 OR Z>HUR-1 THEN 11310 ELSE 11010
12510 GOSUB 12700:TDA=TDA+1:A$=A1$+"FIRST Name":GOSUB 1499:IF Q=0 THEN 12500 ELSE Z$=B$(1):GOSUB 5000:GOSUB 5100:FE$=FNSS$(Z$):IF Q=1 THEN 12530
12520 Z$=B$(2):GOTO 12540
12530 A$=A1$+"LAST Name":GOSUB 1500:Z$=B$(1)
12540 GOSUB 5000:GOSUB 5100:LK$=FNSS$(Z$):IF LEN(FE$)<2 OR LEN(LK$)<2 OR (LEN(FE$)+LEN(LK$))>30 THEN 12500
12550 NAM$=MID$(FE$+" "+LK$,1,31):Z$=FE$:RETURN
12570 FG=0:CLOSE 2:OPEN LG$(18) FOR INPUT AS 2
12580 IF EOF(2) THEN 1495 ELSE INPUT #2,DF$:IF Z$<>DF$ THEN 12580 ELSE FG=-1:RETURN
12595 A$="Real name required. Call traced & recorded.":GOSUB 1405:GOTO 10698
12600 GOSUB 4910:GOSUB 26000:A$="Checking Users...":GOSUB 1400:IF NUR>=HUR*0.95 THEN Z$="No room for new users":A$=Z$:GOSUB 13670:GOSUB 1397:UIX=0:FG=0:RETURN
12605 GOSUB 9400:X$=FNS$(TEA$,31):A$=FNS$("NEWUSER",31):DR$=SPACE$(31):DF=(ASC(MID$(TEA$,2,1))*10 + 7) MOD HUR:UIX=((ASC(TEA$)*100 + ASC(MID$(TEA$,LEN(TEA$)/2,1))*10 + ASC(RIGHT$(TEA$,1))) MOD HUR) + 1:IX=0
12610 GET 2,UIX:IF X$=NM$ THEN FG=-1:RETURN ELSE IF NM$=DR$ THEN UIX=IX-(IX=0)*UIX:FG=0:RETURN ELSE IF ASC(NM$)=0 OR NM$=A$ THEN IF IX=0 THEN IX=UIX
12620 UIX=UIX+DF:IF UIX>HUR-1 THEN UIX=UIX-HUR:GOTO 12610 ELSE 12610
12950 A$="Type system calling from (C/R if "+SY$+")":GOSUB 1500:IF Q=0 THEN LSET MA$=SY$ ELSE Z$=B$(1):GOSUB 5000:LSET MA$=Z$
12960 A$=A1$+"CITY and STATE":GOSUB 1500:IF Q=0 THEN 12960 ELSE Z$=B$(1):GOSUB 5000:LSET CS$=Z$:CI$=Z$+SPACE$(2):RETURN
12962 X=0:FF=0:A$="String to search (C/R to end)":GOSUB 1500:Z$=B$(1):GOSUB 5000:R$=Z$:IF R$=""THEN 11000
12963 GET 2,I:GOSUB 12966:X=INSTR(LG$(4),R$):IF X>0 THEN 11015 ELSE IF I>HUR-1 THEN 11000
12965 I=I+1:X=0:GOTO 12963
12966 FF=INSTR("NCPSL",LG$(1)):IF FF=0 THEN 11000
12967 ON FF GOTO 12968,12969,12970,12971,12972
12968 LG$(4)=NM$:RETURN
12969 LG$(4)=CS$:RETURN
12970 LG$(4)=PW$:RETURN
12971 LG$(4)=MA$:RETURN
12972 LG$(4)=STR$(CVI(SL$)):RETURN
13000 IF ERR=7 THEN 13650
13010 IF ERL=180 AND ERR=63 THEN RESUME 187
13020 IF ERL=187 AND (ERR=24 OR ERR=25 OR ERR=27 OR ERR=68) THEN LH=0:RESUME 187
13022 IF ERL=324 AND ERR=57 THEN R1=INP(LSR):RESUME 324
13025 IF ERL=677 AND ERR=5 THEN RESUME 670
13033 IF ERL=825 AND ERR=5 THEN RESUME 830
13035 IF ERL=954 AND ERR=5 THEN HH=1:FH$="":RESUME 954
13036 IF ERL=1420 AND ERR=69 THEN GOSUB 13660:RESUME 13540
13037 IF ERL=1540 AND ERR=57 THEN RESUME 1540
13038 IF ERL=4370 AND ERR=6 THEN RESUME 1200
13045 IF ERL=5130 AND ERR=63 THEN RESUME 5160
13047 IF ERL=5150 AND ERR=62 THEN RESUME 5160
13050 IF ERL=13674 THEN LH=0:RESUME 13674
13060 IF ERL=11025 THEN QQ=0:RESUME 11025
13070 IF ERL=11100 THEN QQ=0:RESUME 11100
13087 IF ERL=20242 AND ERR=62 THEN RESUME 20247
13090 IF ERR=58 THEN 13130
13100 IF(ERR=EC AND(FNTI!-TKA!<5))THEN EA=EA+1:IF EA>10 THEN 50000
13120 EC=ERR:IF FNTI!-TKA!>5 THEN EA=0 ELSE TKA!=FNTI!
13130 IF ERL=117 AND ERR=53 THEN DF$=CA$:GOTO 13600
13135 IF ERL=121 AND ERR=62 THEN DF$=CA$:GOTO 13600
13140 IF ERL=220 THEN RESUME 220
13180 IF ERL=1420 AND ERR=57 THEN R1=INP(LSR):RESUME 1425
13190 IF ERL=1540 OR ERL=3736 OR ERL=20840 OR ERL=21280 OR ERL=21360 OR ERL=21420 THEN GOSUB 50500:IF INP(MSR)<128 THEN RESUME 10595
13200 IF ERL=1540 THEN RESUME 1540
13220 IF ERL=3736 THEN RESUME 3736
13230 IF ERL=4797 THEN GOSUB 50500:Z$=A$:GOSUB 13670:IF INP(MSR)<128 THEN RESUME 10595 ELSE RESUME 4797
13235 IF ERL=5140 AND ERR=53 THEN Z$="Missing file "+PD$:GOSUB 13670:IF Z=1 THEN Z$=B$(1):GOSUB 5000:RESUME 5160 ELSE RESUME 5160
13237 IF ERL=5300 THEN IF ERR=53 THEN RESUME 2210 ELSE RESUME 5310
13238 IF ERL=5323 THEN IF ERR=53 OR ERR=64 THEN MES$=MB$:GRN$="":RESUME 5310 ELSE RESUME 5325
13239 IF ERL=5327 THEN IF ERR=53 OR ERR=64 THEN UF$=UF1$:GOSUB 21990:GET 1,1:MID$(R$,57,5)=STR$(NUR):MID$(R$,62,5)=STR$(HUR):PUT 1,1:GOSUB 25000:TIX=MUIX:RESUME 5345 ELSE RESUME 5330
13240 IF ERL=5535 AND ERR=57 THEN R1=INP(LSR):RESUME 20015
13250 IF ERL=5535 THEN RESUME 5530
13255 IF ERL=7100 AND ERR=53 THEN Z$="Missing File "+F$:GOSUB 13670:RESUME 6080
13260 IF ERL=7110 THEN RESUME 6080
13270 IF ERL=7130 AND ERR=52 THEN RESUME 7260
13280 IF ERL=10600 AND ERR=63 THEN 10595
13310 IF ERL=10720 THEN IF ERR=53 OR ERR=64 THEN RESUME 1495
13312 IF ERL=10986 AND ERR=58 THEN RESUME 10987
13314 IF ERL=10986 THEN A$="Door "+Z$+" closed"+TT$:GOSUB 1405:RESUME 1200
13340 IF ERL=12570 AND ERR=53 THEN RESUME 710
13355 IF ERL=20165 AND ERR=58 THEN RESUME 20167
13357 IF ERL=20165 THEN RESUME 20170
13360 IF ERL=20220 AND ERR=53 THEN RESUME 20225
13370 IF ERL=20220 AND ERR=58 THEN OK=-1:RESUME 20225
13372 IF ERL=20220 AND ERR=64 THEN A$="Invalid file name":GOSUB 1405:RESUME 20200
13375 IF ERL=20240 AND ERR=53 THEN Z$="No File "+FB$:GOSUB 13670:RESUME 20247
13380 IF ERL=20440 AND ERR=58 THEN OK=0:RESUME 20450
13385 IF ERL=20440 AND ERR=53 THEN RESUME 20450
13390 IF ERL=20450 THEN OK=0:RESUME 20455
13400 IF ERL=20620 THEN OK=0:RESUME 20621
13402 IF ERL=20660 AND ERR=55 THEN X#=(CDBL(LOC(2))*128)+128:RESUME 20700
13405 IF ERL=20735 AND ERR=53 THEN RESUME 1495
13410 IF ERL=20840 THEN RESUME 20840
13420 IF ERL=21130 THEN OK=0:RESUME 21131
13430 IF ERL=21280 THEN RESUME 21280
13440 IF ERL=21360 THEN RESUME 21360
13442 IF ERL=21420 THEN RESUME 21420
13443 IF ERL=43030 AND ERR=58 THEN OK=-1:RESUME 43031
13445 IF ERL=43030 AND ERR=53 THEN RESUME 43031
13446 IF ERL=52000 AND ERR=53 THEN IF Z$=CG$ THEN CLOSE 2:OPEN "O",2,CG$:CLOSE 2:RESUME 52000
13447 IF ERL=52000 AND ERR=53 THEN A$="Upload directory file missing"+TT$:GOSUB 1405:RESUME 1200
13450 IF 65535=ERL THEN 50000
13460 IF ERR=5 THEN 10595
13470 IF ERR=57 OR ERR=24 OR ERR=25 THEN GOSUB 50500:R1=INP(MSR):IF R1<128 THEN RESUME 10595
13480 IF ERR=61 THEN A$="* Disk full - terminating *":GOSUB 1399:GOSUB 33090:GOSUB 13660:RESUME 13540
20240 CLOSE 2:OPEN FB$ FOR INPUT AS 2:N$=Z$:GOSUB 20282:LG$(9)=DR$:LG$(21)=X$:LG$(10)=EXT$
20242 IF EOF(2) THEN 20247 ELSE INPUT #2,N$,DF,DF$:GOSUB 20282
20243 IF DR$<>"" AND DR$<>LG$(9) THEN 20242 ELSE A$=LG$(21):Z$=X$:GOSUB 20285:IF OK THEN 20242 ELSE A$=LG$(10):Z$=EXT$:GOSUB 20285:IF OK THEN 20242
20244 IF UG<DF THEN 20245 ELSE IF DF$="" THEN 20247 ELSE Z$=DF$:GOSUB 5000:DF$=Z$:IF DF$=PW$ THEN 20247 ELSE A$="Enter PASSWORD for downloading "+F$:GOSUB 1500:Z$=B$(1):GOSUB 5000:IF Z$=DF$ THEN 20247
20245 RS$="DownLoad "+F$:GOSUB 1380:RETURN 20015
20247 DF=0:EXT$=RIGHT$(F$,4):IF INSTR(".WRK.FW .ARC.EXE.COM.OBJ.WKS.LBR",EXT$) OR MID$(EXT$,3,1)="Q" OR (BD AND EXT$=".BAS") THEN A$="Non-ASCII transfer required":GOSUB 1405:DF=-1
20248 T$="Download"+FU$:GOSUB 21620:IF FF THEN 20260 ELSE GOSUB 21600
20260 HH=1:ON FF GOTO 20340,20262,20290,1495
20262 IF NOT -(CE*MN) THEN A$="MNP unavailable":GOSUB 1405:ON HH GOTO 1495,1495 ELSE LL=HH*HH:LL=LL-HH:GOSUB 20264:ON LL+HH GOTO 20385,20266,20660,20730:STOP
20264 CLOSE 3:OUT MCR,INP(MCR) OR 1:CALL MNP(HH,F$,CP$,BPS):OPEN CP$+":"+MID$(" 300 45012002400",(-4*BPS),4)+","+MID$("N,8,1E,7,",6+5*BE,4)+"1,RS,CD,DS" AS 3:RETURN
20266 A$="<Download aborted>":SN=0:GOTO 20390
20282 Z$=N$:GOSUB 5000:IF MID$(Z$,2,1)=":" THEN DR$=LEFT$(Z$,1):S=3 ELSE DR$="":S=1
20340 IF DF THEN A$="Switch to XMODEM or MNP":GOSUB 1405:GOTO 20015 ELSE CLOSE 2:OPEN "I",2,F$:TLA=139:GOSUB 20750:A$="* <Ctrl X> aborts <Ctrl S> suspends *":GOSUB 1400:A$="ASCII SEND ready. Press <C/R> to start":GOSUB 1500
20380 STI=-1:GOSUB 6030:IF RET THEN A$="<*>Download aborted<*>":SN=0:GOTO 20390
20381 A$=CHR$(26):GOSUB 1400:IF NOT LJ THEN FOR X=1 TO 5:PRINT#3,CHR$(7):GOSUB 50510:NEXT
20385 A$="<End of file>":SN=-1
20390 GOSUB 1400:GOTO 50600
20400 GOSUB 41010:Q!=TCA!:IF Q>1 THEN B$(1)=B$(2):GOTO 20430
20420 A$=F8$+"upload":GOSUB 1500:IF Q=0 THEN RETURN
20430 Z$=B$(1):RS$="Upload ":FOR X=1 TO LEN(FA$):GOSUB 20741:ON A GOTO 20440,20420
20440 OK=-1:NAME F$ AS F$
20450 IF OK THEN 20455
20451 IF UG>=UPS THEN A$="Overwrite file":GOSUB 1500:IF YES THEN 20475
20453 CLOSE 2:A$=Z$+" exists! Use a new file name":GOSUB 1400:GOTO 20420
20455 NEXT:F$=RIGHT$(FA$,1)+":"+Z$:Z$=UB$
20475 Z$=LEFT$(F$,2)+Z$:GOSUB 1400:GOSUB 52000:A$="Upload disk has"+AD$:GOSUB 1400:FH$="(U) "+F$:GOSUB 950:T$="Upload"+FU$:IF NOT OK THEN KILL F$:OK=-1
20477 GOSUB 21620:IF FF THEN 20500 ELSE GOSUB 21600
20500 HH=2:ON FF GOTO 20560,20262,20540,20735
20510 IF PRT THEN PRINT "<Esc> by SYSOP aborts transfer":RETURN ELSE RETURN
20540 A1$="RECEIVE":GOSUB 20320:OK=-1:GOSUB 20860:X#=0:IF OK THEN X#=(CDBL(LOC(2))*128)+X#:GOTO 20700 ELSE 20730
20560 A$="Transfer MUST end with a <Ctrl-K>":GOSUB 1400:A$="ASCII RECEIVE ready":GOSUB 1405:OK=0:X=0:CLOSE 2:OPEN "O",2,F$:GOSUB 20510
20600 WHILE NOT EOF(3):GOSUB 42000:IF LOF(3)<512 THEN PRINT#3,XA$;:X=-1
20710 A$="Describe "+A1$+" (/ if for SYSOP only)"+RTN$+" |----+---1+0---+---2+0---+---3+0---+---4+0":GOSUB 1398:GOSUB 1500:IF LEN(B$(1))>40 THEN 20710
20720 IF LEFT$(B$(1),1)="/"THEN 20725 ELSE PRINT#2,USING"\ \######## & &";A1$;X#;LEFT$(DATE$,6)+RIGHT$(DATE$,2);B$(1)
20725 CLOSE 2:Y$=" >> uploaded << ":ULD=ULD+1:GOSUB 41010:TV!=TV!+UPX!*(TCA!-Q!):GOTO 50610
20730 A$="Upload aborted":GOSUB 1405
20735 CLOSE 2:KILL F$:RETURN
20741 A=1:GOSUB 5000:F$=MID$(FA$,X,1)+":"+Z$:IF INSTR(F$,"?") OR INSTR(F$,"*") OR INSTR(F$," ") OR INSTR(F$,".DEF") OR INSTR(F$,".OLD") OR INSTR(3,F$,":") OR MID$(F$,LEN(F$),1)="." THEN A=2:RETURN
20742 IF LEN(Z$)=>3 THEN IF INSTR("COM1:COM2:LPT1:LPT2:LPT3:PRN:CON:AUX",Z$) THEN NI=VB:RS$=RS$+Z$:GOSUB 1380
22200 CC$=CHR$(1)+MID$(MES$+SPACE$(8),3,8):GOSUB 28000:IF CT=0 THEN RETURN ELSE GOSUB 50500:GOTO 22200
22300 GOSUB 28100:CALL LPLKIT(DF,DF$,A):RETURN
23000 GET 1,1:LE=VAL(LEFT$(R$,8)):CJ#=VAL(MID$(R$,11,10)):NUR=VAL(MID$(R$,57,5)):HUR=VAL(MID$(R$,62,5)):FMR=VAL(MID$(R$,68,7)):NMR=VAL(MID$(R$,75,7)):HMR=VAL(MID$(R$,82,7)):MG=VAL(MID$(R$,127)):RETURN
43030 OK=0:IF GR THEN N$=F$:GOSUB 20282:IF LEN(X$)<8 THEN DF$=DR$+":"+X$+LG$(19)+"."+EXT$:NAME DF$ AS DF$
43031 IF OK THEN F$=DF$:RETURN ELSE RETURN
43040 IF INSTR(3,Z$,MID$(A$,3,(LEN(A$)-2))) THEN RETURN 20245 ELSE RETURN
43050 FIELD 2,55 AS CL$,3 AS HHH$,3 AS MMM$, 3 AS SSS$:LSET CL$=MID$(NG$,65,55):LSET HHH$=STR$(HHH):LSET MMM$=STR$(MMM):LSET SSS$=STR$(SSS):CDX=CDX+1:PUT 2,CDX:FIELD 2,64 AS CL$:LSET CL$=LEFT$(NG$,64):CDX=CDX+1:PUT 2,CDX
43060 LSET CL$=STRING$(64,CHR$(0)):PUT 2:PUT 2:IF FE$=NA$ AND LK$=NB$ THEN SH=-1 ELSE SH=0
53002 A1$=RIGHT$(LM$,4)+LEFT$(LM$,2):A$="Include files on/after (MMDDYY, C/R = last date on "+A1$+")":GOSUB 1500:IF Q=0 THEN RS$=LM$:GOTO 53007 ELSE B$(2)=B$(1)
53005 IF LEN(B$(2))<>6 THEN 53002 ELSE A1$=B$(2):RS$=RIGHT$(A1$,2)+LEFT$(A1$,4)
53007 IF Q>2 THEN B$(2)=B$(3):GOTO 53030
53010 A$="Directory to scan or ALL":GOSUB 1500:IF Q=0 THEN RETURN ELSE B$(2)=B$(1)
53030 Q=2:ED=LEN(FA$)-1:LD=-1:LN=-1:Z$=B$(2):GOSUB 5000:IF Z$="ALL" THEN 53070
53060 GOSUB 20160:LN=0:RETURN
53070 G=2:J=2:FOR JJ=1 TO ED:B$(2)=MID$(FA$,JJ,1)+":"+"*."+DIR$:GOSUB 10720:CLS:NEXT:GOSUB 49000:QX=G:X=3:GOSUB 20161:LN=0:RETURN
56000 CLOSE 2:OPEN "R",2,CF$,64:FIELD 2,64 AS CL$:RETURN
57000 GOSUB 1485:GOSUB 56000:PG=CDX
57005 IF PG <1 OR RET THEN RETURN
57010 GET 2,PG:A$=CL$:IF LEFT$(A$,3)=SPACE$(3) OR INSTR(A$,"on at")=0 THEN 57030
57025 PG=PG-1:GET 2,PG:A1$=LEFT$(CL$,15):IF SH OR LEFT$(A1$,3)<>SPACE$(3) THEN A$=A$+A1$
57027 GOSUB 57100:GOTO 57045
57030 IF SH THEN GOSUB 57100
57045 PG=PG-1:GOTO 57005
57100 GOSUB 1405
57110 IF PL AND Q>=0 THEN Q=Q+1:IF Q>=PL THEN GOSUB 5600:IF NO THEN RETURN 57120 ELSE Q=0
57120 RETURN
59000 PM$=" - ":CALL UTGETPRM(PM$):PM$=MID$(PM$,2,1):NC=INSTR("-1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",PM$): IF NC<2 THEN NC=2:MID$(CA$,5,1)="-":ND$="1":RETURN ELSE ND$=STR$(NC-1):MID$(CA$,5,1)=PM$:RETURN
60000 IF LEN(FK$) <> 2 THEN RETURN
60010 JJ=ASC(RIGHT$(FK$,1)):IF JJ<59 OR JJ>68 THEN RETURN ELSE JJ=JJ-58:ON JJ GOSUB 31000,32000,33000,33040,33060,33070,33090,33110,33130,33150:RETURN
60500 AX=&H100:BX=-4:IF CP$="COM2" THEN BX=-3
60510 DEF SEG=MC:IF NOT CE THEN PRINT"Make line # 60540 CALL CO(AX,BX):RETURN":RETURN